home *** CD-ROM | disk | FTP | other *** search
/ Clickx 47 / Clickx 47.iso / assets / software / Miro_Installer.exe / Miro_Downloader.exe / searchengines.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2008-01-10  |  6.0 KB  |  203 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. import views
  5. import indexes
  6. import re
  7. import template
  8. from util import getSingletonDDBObject, checkU, returnsUnicode
  9. from database import DDBObject
  10. from xhtmltools import urlencode
  11. from templatehelper import quoteattr, escape
  12. from xml.dom.minidom import parse
  13. import resources
  14. import os
  15. import config
  16. import prefs
  17. import logging
  18.  
  19. class SearchEngine(DDBObject):
  20.     
  21.     def __init__(self, name, title, url, sortOrder = 0):
  22.         checkU(name)
  23.         checkU(title)
  24.         checkU(url)
  25.         self.name = name
  26.         self.title = title
  27.         self.url = url
  28.         self.sortOrder = sortOrder
  29.         DDBObject.__init__(self)
  30.  
  31.     
  32.     def getRequestURL(self, query, filterAdultContents, limit):
  33.         requestURL = self.url.replace(u'%s', urlencode(query))
  34.         requestURL = requestURL.replace(u'%a', unicode(int(not filterAdultContents)))
  35.         requestURL = requestURL.replace(u'%l', unicode(int(limit)))
  36.         return requestURL
  37.  
  38.  
  39.  
  40. def deleteEngines():
  41.     for engine in views.searchEngines:
  42.         engine.remove()
  43.     
  44.  
  45.  
  46. def searchForSearchEngines(dir):
  47.     engines = { }
  48.     
  49.     try:
  50.         for f in os.listdir(dir):
  51.             if f.endswith('.xml'):
  52.                 engines[os.path.normcase(f)] = os.path.normcase(os.path.join(dir, f))
  53.                 continue
  54.     except OSError:
  55.         pass
  56.  
  57.     return engines
  58.  
  59.  
  60. def warn(file, message):
  61.     logging.warn('Error parsing searchengine: %s: %s', file, message)
  62.  
  63.  
  64. def loadSearchEngine(file):
  65.     
  66.     try:
  67.         dom = parse(file)
  68.         id = None
  69.         displayname = None
  70.         url = None
  71.         sort = None
  72.         root = dom.documentElement
  73.         for child in root.childNodes:
  74.             if child.nodeType == child.ELEMENT_NODE:
  75.                 tag = child.tagName
  76.                 text = child.childNodes[0].data
  77.                 if tag == 'id':
  78.                     if id != None:
  79.                         warn(file, 'Duplicated id tag')
  80.                         return None
  81.                     
  82.                     id = text
  83.                 elif tag == 'displayname':
  84.                     if displayname != None:
  85.                         warn(file, 'Duplicated displayname tag')
  86.                         return None
  87.                     
  88.                     displayname = text
  89.                 elif tag == 'url':
  90.                     if url != None:
  91.                         warn(file, 'Duplicated url tag')
  92.                         return None
  93.                     
  94.                     url = text
  95.                 elif tag == 'sort':
  96.                     if sort != None:
  97.                         warn(file, 'Duplicated sort tag')
  98.                         return None
  99.                     
  100.                     sort = float(text)
  101.                 else:
  102.                     warn(file, 'Unrecognized tag %s' % (tag,))
  103.                     return None
  104.             tag == 'id'
  105.         
  106.         dom.unlink()
  107.         if id == None:
  108.             warn(file, 'Missing id tag')
  109.             return None
  110.         
  111.         if displayname == None:
  112.             warn(file, 'Missing displayname tag')
  113.             return None
  114.         
  115.         if url == None:
  116.             warn(file, 'Missing url tag')
  117.             return None
  118.         
  119.         if sort == None:
  120.             sort = 0
  121.         
  122.         SearchEngine(id, displayname, url, sort)
  123.     except:
  124.         warn(file, 'Exception parsing file')
  125.  
  126.  
  127.  
  128. def createEngines():
  129.     deleteEngines()
  130.     searchEngines = searchForSearchEngines(resources.path('searchengines'))
  131.     searchEngines.update(searchForSearchEngines(os.path.join(config.get(prefs.SUPPORT_DIRECTORY), 'searchengines')))
  132.     for file in searchEngines.itervalues():
  133.         loadSearchEngine(file)
  134.     
  135.     SearchEngine(u'all', u'Search All', u'', -1)
  136.  
  137.  
  138. def getRequestURL(engineName, query, filterAdultContents = True, limit = 50):
  139.     if query == "LET'S TEST DTV'S CRASH REPORTER TODAY":
  140.         someVariable = intentionallyUndefinedVariableToTestCrashReporter
  141.     
  142.     if query == "LET'S DEBUG DTV: DUMP DATABASE":
  143.         import database
  144.         database.defaultDatabase.liveStorage.dumpDatabase(database.defaultDatabase)
  145.         return u''
  146.     
  147.     for engine in views.searchEngines:
  148.         if engine.name == engineName:
  149.             return engine.getRequestURL(query, filterAdultContents, limit)
  150.             continue
  151.         None if engineName == u'all' else []
  152.     
  153.     return u''
  154.  
  155. getRequestURL = returnsUnicode(getRequestURL)
  156.  
  157. def getSearchEnginesHTML():
  158.     searchFeed = getSingletonDDBObject(views.feeds.filterWithIndex(indexes.feedsByURL, 'dtv:search'))
  159.     enginesHTML = u'<select name="engines" onChange="updateLastSearchEngine()">\n'
  160.     for engine in views.searchEngines:
  161.         enginesHTML += u'<option value="%s"' % (quoteattr(engine.name),)
  162.         if engine.name == searchFeed.lastEngine:
  163.             enginesHTML += u' selected="selected"'
  164.         
  165.         enginesHTML += u'>'
  166.         enginesHTML += escape(engine.title)
  167.         enginesHTML += u'</option>'
  168.     
  169.     enginesHTML += u'</select>'
  170.     return enginesHTML
  171.  
  172. getSearchEnginesHTML = returnsUnicode(getSearchEnginesHTML)
  173.  
  174. def getLastEngineTitle():
  175.     last = getLastEngine()
  176.     for engine in views.searchEngines:
  177.         if engine.name == last:
  178.             return engine.title
  179.             continue
  180.     
  181.     return u''
  182.  
  183.  
  184. def getLastEngine():
  185.     searchFeed = _getSearchFeed()
  186.     if not hasattr(searchFeed, 'lastEngine'):
  187.         return u'youtube'
  188.     
  189.     return searchFeed.lastEngine
  190.  
  191.  
  192. def getLastQuery():
  193.     searchFeed = _getSearchFeed()
  194.     if not hasattr(searchFeed, 'lastQuery'):
  195.         return ''
  196.     
  197.     return searchFeed.lastQuery
  198.  
  199.  
  200. def _getSearchFeed():
  201.     return getSingletonDDBObject(views.feeds.filterWithIndex(indexes.feedsByURL, 'dtv:search'))
  202.  
  203.